/* @ 数组扁平化
题目解读：
    数组扁平化是指将一个多维数组变为一个一维数组。
    即：
        const arr = [1, [2, [3, [4, 5]]], 6];
        // => [1, 2, 3, 4, 5, 6]
**/

// --- 原数组
const arr = [1, [2, [3, [4, 5]]], 6];


/* 方法一：使用 flat()
    解释：
        1、使用 Infinity 作为深度，展开任意深度的嵌套数组
        2、flat() 方法会移除数组中的空项
*/
const res1 = arr.flat(Infinity);


/* 方法二：利用正则
        拆分理解一下
*/
const res3 = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']');


/* 方法三：使用 reduce
    reduce 的应用
*/
const flatten = arr => {
    return arr.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
    }, []);
}
const res4 = flatten(arr);


/* 方法四：函数递归
    对递归执行的理解
*/
const res5 = [];
const fn = arr => {
    for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
            fn(arr[i]);
        } else {
            res5.push(arr[i]);
        }
    }
}
fn(arr);